{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  第五步：调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:45:58.053466Z",
     "start_time": "2018-01-03T09:45:56.704584Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取数据 & 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:45:59.923233Z",
     "start_time": "2018-01-03T09:45:58.595210Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "data = pd.read_csv(dpath + 'RentListingInquries_FE_train.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:46:01.848877Z",
     "start_time": "2018-01-03T09:46:00.144509Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target = pd.read_csv(dpath + 'RentListingInquries_FE_test.csv')\n",
    "target.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:46:03.056316Z",
     "start_time": "2018-01-03T09:46:02.850114Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:517: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self.obj[item] = s\n"
     ]
    }
   ],
   "source": [
    "def remove_noise(df):\n",
    "#remove some noise\n",
    "    df= df[df.price < 10000]\n",
    "\n",
    "    df.loc[df[\"bathrooms\"] == 112, \"bathrooms\"] = 1.5\n",
    "    df.loc[df[\"bathrooms\"] == 10, \"bathrooms\"] = 1\n",
    "    df.loc[df[\"bathrooms\"] == 20, \"bathrooms\"] = 2\n",
    "    return df\n",
    "data = remove_noise(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:46:04.999887Z",
     "start_time": "2018-01-03T09:46:04.934957Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = data['interest_level']\n",
    "X_train = data.drop('interest_level',axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:46:07.043854Z",
     "start_time": "2018-01-03T09:46:06.690889Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化 \n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:46:08.691417Z",
     "start_time": "2018-01-03T09:46:08.657450Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)\n",
    "kfold = list(kfold.split(X_train,y_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:46:10.427114Z",
     "start_time": "2018-01-03T09:46:10.417286Z"
    },
    "run_control": {
     "marked": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.001, 0.01, 0.05, 0.1, 1.5, 2],\n",
       " 'reg_lambda': [0.001, 0.01, 0.05, 0.1, 0.5, 1, 2]}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#reg_alpha = [1e-3, 1e-2, 0.05, 0.1]    #default = 0\n",
    "#reg_lambda = [1e-3, 1e-2, 0.05, 0.1]   #default = 1\n",
    "\n",
    "reg_alpha = [1e-3, 1e-2, 0.05, 0.1, 1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [1e-3, 1e-2, 0.05, 0.1,0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T11:02:01.532666Z",
     "start_time": "2018-01-03T09:46:11.482127Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59204, std: 0.00559, params: {'reg_alpha': 0.001, 'reg_lambda': 0.001},\n",
       "  mean: -0.59225, std: 0.00508, params: {'reg_alpha': 0.001, 'reg_lambda': 0.01},\n",
       "  mean: -0.59178, std: 0.00513, params: {'reg_alpha': 0.001, 'reg_lambda': 0.05},\n",
       "  mean: -0.59200, std: 0.00554, params: {'reg_alpha': 0.001, 'reg_lambda': 0.1},\n",
       "  mean: -0.59202, std: 0.00545, params: {'reg_alpha': 0.001, 'reg_lambda': 0.5},\n",
       "  mean: -0.59138, std: 0.00504, params: {'reg_alpha': 0.001, 'reg_lambda': 1},\n",
       "  mean: -0.59154, std: 0.00477, params: {'reg_alpha': 0.001, 'reg_lambda': 2},\n",
       "  mean: -0.59218, std: 0.00490, params: {'reg_alpha': 0.01, 'reg_lambda': 0.001},\n",
       "  mean: -0.59184, std: 0.00495, params: {'reg_alpha': 0.01, 'reg_lambda': 0.01},\n",
       "  mean: -0.59224, std: 0.00546, params: {'reg_alpha': 0.01, 'reg_lambda': 0.05},\n",
       "  mean: -0.59230, std: 0.00593, params: {'reg_alpha': 0.01, 'reg_lambda': 0.1},\n",
       "  mean: -0.59202, std: 0.00504, params: {'reg_alpha': 0.01, 'reg_lambda': 0.5},\n",
       "  mean: -0.59198, std: 0.00456, params: {'reg_alpha': 0.01, 'reg_lambda': 1},\n",
       "  mean: -0.59165, std: 0.00452, params: {'reg_alpha': 0.01, 'reg_lambda': 2},\n",
       "  mean: -0.59225, std: 0.00517, params: {'reg_alpha': 0.05, 'reg_lambda': 0.001},\n",
       "  mean: -0.59160, std: 0.00498, params: {'reg_alpha': 0.05, 'reg_lambda': 0.01},\n",
       "  mean: -0.59157, std: 0.00497, params: {'reg_alpha': 0.05, 'reg_lambda': 0.05},\n",
       "  mean: -0.59175, std: 0.00562, params: {'reg_alpha': 0.05, 'reg_lambda': 0.1},\n",
       "  mean: -0.59188, std: 0.00519, params: {'reg_alpha': 0.05, 'reg_lambda': 0.5},\n",
       "  mean: -0.59204, std: 0.00497, params: {'reg_alpha': 0.05, 'reg_lambda': 1},\n",
       "  mean: -0.59199, std: 0.00469, params: {'reg_alpha': 0.05, 'reg_lambda': 2},\n",
       "  mean: -0.59179, std: 0.00472, params: {'reg_alpha': 0.1, 'reg_lambda': 0.001},\n",
       "  mean: -0.59163, std: 0.00497, params: {'reg_alpha': 0.1, 'reg_lambda': 0.01},\n",
       "  mean: -0.59186, std: 0.00539, params: {'reg_alpha': 0.1, 'reg_lambda': 0.05},\n",
       "  mean: -0.59176, std: 0.00482, params: {'reg_alpha': 0.1, 'reg_lambda': 0.1},\n",
       "  mean: -0.59158, std: 0.00492, params: {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  mean: -0.59157, std: 0.00497, params: {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  mean: -0.59146, std: 0.00484, params: {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  mean: -0.59089, std: 0.00494, params: {'reg_alpha': 1.5, 'reg_lambda': 0.001},\n",
       "  mean: -0.59121, std: 0.00466, params: {'reg_alpha': 1.5, 'reg_lambda': 0.01},\n",
       "  mean: -0.59070, std: 0.00452, params: {'reg_alpha': 1.5, 'reg_lambda': 0.05},\n",
       "  mean: -0.59138, std: 0.00441, params: {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  mean: -0.59117, std: 0.00472, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.59117, std: 0.00479, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.59082, std: 0.00500, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.59095, std: 0.00467, params: {'reg_alpha': 2, 'reg_lambda': 0.001},\n",
       "  mean: -0.59086, std: 0.00468, params: {'reg_alpha': 2, 'reg_lambda': 0.01},\n",
       "  mean: -0.59084, std: 0.00449, params: {'reg_alpha': 2, 'reg_lambda': 0.05},\n",
       "  mean: -0.59107, std: 0.00501, params: {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  mean: -0.59070, std: 0.00479, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.59093, std: 0.00472, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.59097, std: 0.00498, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       " -0.59069625786691382)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=247,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=2,\n",
    "        gamma=0,\n",
    "        subsample=0.9,\n",
    "        colsample_bytree=0.6,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T11:02:01.874887Z",
     "start_time": "2018-01-03T11:02:01.841579Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 164.57691331,  163.81836643,  161.09566388,  164.31163816,\n",
       "         164.92080364,  166.67026157,  165.93134627,  164.3037426 ,\n",
       "         168.2052763 ,  166.25641265,  162.60530257,  162.22565737,\n",
       "         161.75767941,  160.96896539,  161.70762835,  162.7919302 ,\n",
       "         161.24985766,  161.16992183,  161.25240493,  161.42433262,\n",
       "         161.14803538,  160.6577529 ,  160.46204486,  160.62546806,\n",
       "         161.50091786,  161.42851067,  161.20666456,  160.90399313,\n",
       "         161.67879305,  161.70264869,  161.03521972,  161.43800921,\n",
       "         161.81687956,  161.70210199,  162.01891451,  161.52695107,\n",
       "         161.53109035,  161.85117621,  161.72342091,  161.87711577,\n",
       "         161.6874402 ,  132.82591639]),\n",
       " 'mean_score_time': array([ 1.22001762,  1.60784931,  1.69096913,  1.48784542,  2.13978424,\n",
       "         1.14711967,  1.26612139,  1.32697997,  0.84846807,  1.09866138,\n",
       "         0.96380734,  0.83773718,  0.94381151,  0.84118037,  0.8422452 ,\n",
       "         0.87492938,  0.75957246,  0.80606933,  0.79906874,  0.81793642,\n",
       "         0.83135424,  0.79545817,  0.78231912,  0.82778177,  0.76751208,\n",
       "         0.78974757,  0.77113605,  0.78828769,  0.88830452,  0.81209149,\n",
       "         0.85207767,  0.84205852,  0.80317602,  0.86880412,  0.86160169,\n",
       "         0.81764765,  0.87174773,  0.81420102,  0.86724329,  0.86624885,\n",
       "         0.80083036,  0.60536728]),\n",
       " 'mean_test_score': array([-0.59203852, -0.59225306, -0.59177618, -0.59200227, -0.59202367,\n",
       "        -0.59137762, -0.59153867, -0.59217531, -0.59183603, -0.59223503,\n",
       "        -0.59230283, -0.59202058, -0.59198317, -0.59164954, -0.59224919,\n",
       "        -0.59159702, -0.59157184, -0.59175447, -0.5918794 , -0.59204142,\n",
       "        -0.5919926 , -0.59179441, -0.59162885, -0.59186143, -0.59176211,\n",
       "        -0.59157588, -0.59157075, -0.59146299, -0.59089006, -0.59120978,\n",
       "        -0.59070274, -0.59138461, -0.59117343, -0.59117165, -0.59081745,\n",
       "        -0.59094822, -0.59086313, -0.59083883, -0.5910653 , -0.59069626,\n",
       "        -0.59093482, -0.5909721 ]),\n",
       " 'mean_train_score': array([-0.46407672, -0.46563226, -0.46541398, -0.46559702, -0.46830294,\n",
       "        -0.47082873, -0.47427819, -0.4650287 , -0.46518892, -0.46541957,\n",
       "        -0.46578423, -0.46846647, -0.47051626, -0.47518037, -0.46445757,\n",
       "        -0.46431342, -0.46451582, -0.46500283, -0.46817517, -0.47006269,\n",
       "        -0.47442972, -0.46416673, -0.46421607, -0.4644156 , -0.46455919,\n",
       "        -0.46708846, -0.46988379, -0.47400944, -0.46521502, -0.46511206,\n",
       "        -0.46552082, -0.46574311, -0.4682299 , -0.47047819, -0.47361875,\n",
       "        -0.46888528, -0.46825957, -0.46891791, -0.46951789, -0.47041345,\n",
       "        -0.47265897, -0.47564077]),\n",
       " 'param_reg_alpha': masked_array(data = [0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.01 0.01 0.01 0.01 0.01 0.01\n",
       "  0.01 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.1 0.1 0.1 0.1 0.1 0.1 0.1 1.5\n",
       "  1.5 1.5 1.5 1.5 1.5 1.5 2 2 2 2 2 2 2],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False\n",
       "  False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_reg_lambda': masked_array(data = [0.001 0.01 0.05 0.1 0.5 1 2 0.001 0.01 0.05 0.1 0.5 1 2 0.001 0.01 0.05\n",
       "  0.1 0.5 1 2 0.001 0.01 0.05 0.1 0.5 1 2 0.001 0.01 0.05 0.1 0.5 1 2 0.001\n",
       "  0.01 0.05 0.1 0.5 1 2],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False\n",
       "  False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'reg_alpha': 0.001, 'reg_lambda': 0.001},\n",
       "  {'reg_alpha': 0.001, 'reg_lambda': 0.01},\n",
       "  {'reg_alpha': 0.001, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 0.001, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 0.001, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.001, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.001, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.01, 'reg_lambda': 0.001},\n",
       "  {'reg_alpha': 0.01, 'reg_lambda': 0.01},\n",
       "  {'reg_alpha': 0.01, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 0.01, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 0.01, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.01, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.01, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.05, 'reg_lambda': 0.001},\n",
       "  {'reg_alpha': 0.05, 'reg_lambda': 0.01},\n",
       "  {'reg_alpha': 0.05, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 0.05, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 0.05, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.05, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.05, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 0.001},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 0.01},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.001},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.01},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.001},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.01},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([36, 41, 26, 33, 35, 14, 17, 38, 28, 39, 42, 34, 31, 23, 40, 21, 19,\n",
       "        24, 30, 37, 32, 27, 22, 29, 25, 20, 18, 16,  6, 13,  2, 15, 12, 11,\n",
       "         3,  8,  5,  4, 10,  1,  7,  9], dtype=int32),\n",
       " 'split0_test_score': array([-0.58435456, -0.58477153, -0.58463431, -0.58375823, -0.58435773,\n",
       "        -0.58480361, -0.58414723, -0.58593922, -0.58503182, -0.58459344,\n",
       "        -0.58422738, -0.5846498 , -0.58547158, -0.58541639, -0.58511154,\n",
       "        -0.58390533, -0.58461287, -0.58382766, -0.58510732, -0.58514531,\n",
       "        -0.58512291, -0.58501017, -0.58424977, -0.58405343, -0.58526878,\n",
       "        -0.58456911, -0.58412981, -0.58398265, -0.5834386 , -0.58412216,\n",
       "        -0.58379168, -0.58456888, -0.58402338, -0.58369921, -0.58300625,\n",
       "        -0.58371301, -0.58382026, -0.58364842, -0.5831082 , -0.58331991,\n",
       "        -0.5831704 , -0.58338489]),\n",
       " 'split0_train_score': array([-0.46559227, -0.46735399, -0.46748337, -0.4671402 , -0.47082506,\n",
       "        -0.47229679, -0.4763321 , -0.46696533, -0.46728222, -0.46849185,\n",
       "        -0.46700488, -0.47055973, -0.47227249, -0.47701345, -0.46753916,\n",
       "        -0.4659728 , -0.46732265, -0.46750128, -0.47090227, -0.47084231,\n",
       "        -0.47804509, -0.46674454, -0.46723675, -0.46712826, -0.46648075,\n",
       "        -0.46913298, -0.47195878, -0.47684682, -0.46830435, -0.4679726 ,\n",
       "        -0.46767286, -0.46867848, -0.47086351, -0.47297029, -0.47627388,\n",
       "        -0.47127716, -0.47030301, -0.46985835, -0.47227451, -0.47269319,\n",
       "        -0.47506032, -0.47856473]),\n",
       " 'split1_test_score': array([-0.60048196, -0.59940082, -0.59970708, -0.59987915, -0.59995515,\n",
       "        -0.59880207, -0.59780861, -0.5998802 , -0.5993885 , -0.5999398 ,\n",
       "        -0.60151228, -0.59888821, -0.59824704, -0.59798699, -0.60006412,\n",
       "        -0.5986656 , -0.59895942, -0.59988122, -0.59940114, -0.59907631,\n",
       "        -0.59873475, -0.59803872, -0.59818399, -0.59991559, -0.59856238,\n",
       "        -0.59828149, -0.5981552 , -0.59823878, -0.59794283, -0.59776184,\n",
       "        -0.59649158, -0.59746551, -0.59680473, -0.59719207, -0.59637962,\n",
       "        -0.59720009, -0.59730118, -0.59673503, -0.59760024, -0.59694975,\n",
       "        -0.59680824, -0.59730221]),\n",
       " 'split1_train_score': array([-0.46427591, -0.46517648, -0.46475398, -0.46534229, -0.4671828 ,\n",
       "        -0.46984373, -0.47397741, -0.46476555, -0.46565886, -0.46557756,\n",
       "        -0.46613984, -0.46655549, -0.46878958, -0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<b>limit_output extension: Maximum message size of 10000 exceeded with 16882 characters</b>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T11:02:02.566393Z",
     "start_time": "2018-01-03T11:02:02.125429Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.590696 using {'reg_alpha': 2, 'reg_lambda': 0.5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n19Jbdtq2eQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x106397b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当 reg_alpha'= 2, 'reg_lambda'= 0.5,logloss 的值 0.590696 比 默认参数 logloss 小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "nbTranslate": {
   "displayLangs": [
    "*"
   ],
   "hotkey": "alt-t",
   "langInMainMenu": true,
   "sourceLang": "en",
   "targetLang": "fr",
   "useGoogleTranslate": true
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
